package com.zx._12_算法.数据结构.queue;

/**
 * @version v1.0
 * @Project: knowledge
 * @Title: Queue 先进先出--数组实现(JDK中的队列大部分使用的是链表的结构实现的)
 *         enqueue 从队列尾部添加一个元素（新来一个排队的人，文明礼貌，站在了队伍末尾）
 *         dequeue 从队列头部删除一个元素（排队伍最前面的人刚办理完登机手续，离开了队伍）
 *         head 返回头部的元素，注意，不是删除（只是看一下，谁排在最前面）
 *         size 返回队列大小（数一数有多少人在排队）
 *         clear 清空队列（航班取消，大家都散了吧）
 *         isEmpty 判断队列是否为空 （看看是不是有人在排队）
 *         tail 返回队列尾节点
 * @author: zhangxue
 * @date: 2019年7月23日下午10:48:36
 * @company: 未知之地
 * @Copyright: Copyright (c) 2019
 */
public class Queue {

    private int size;

    private int capacity = 100;

    private int[] data = new int[capacity];

    public void enqueue(Integer num) {
        data[size] = num;
        size++;
    }

    public Integer dequeue() {
        if (size == 0) {
            return null;
        }
        size--;
        // 取出列头
        int num = data[0];
        // 剩下的数据往前移动一位
        for (int i = 1; i < data.length; i++) {
            data[i - 1] = data[i];
        }
        return num;
    }

    public Integer head() {
        if (size == 0) {
            return null;
        }
        return data[0];
    }

    public int size() {
        return size;
    }

    public void clear() {
        size = 0;
        data = new int[capacity];
    }

    public boolean isEmpty() {
        return size == 0;
    }

    public Integer tail() {
        if (size == 0) {
            return null;
        }
        return data[size];
    }


}
